package com.class05.service;

import com.class05.dao.StudentDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

@Service
public class StudentService {

    @Autowired
    private StudentDao studentDao;


    //    timeout: 超时时间，单位为秒，如果超过这个时间，则回滚事务
    @Transactional(timeout = 6,
            rollbackFor = Exception.class,
            noRollbackFor = FileNotFoundException.class ,
            isolation = Isolation.READ_COMMITTED
    )  // 事务注解 默认只对运行时异常进行回滚
    public void changeInfo() throws FileNotFoundException {
        studentDao.updateAgeById(10, 1);
        System.out.println("-----------");
//        测试超时时间
//        int a = 10 / 0;
//        try {
//            Thread.sleep(5000);
//        } catch (InterruptedException e) {
//            throw new RuntimeException(e);
//        }
//        1、测试默认只针对运行时异常回滚，编译时异常不回滚。
//        new FileInputStream("d:/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z");
//       2、指定回滚异常 rollbackFor属性：指定哪些异常类才会回滚,默认是 RuntimeException and Error 异常方可回滚!
//        同时也可以指定当前异常或其异常的父类
        new FileInputStream("d:/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z");
//       3、指定不回滚异常 noRollbackFor属性
//       在默认设置和已有设置的基础上，再指定一个异常类型，碰到它不回滚。
//       noRollbackFor属性：指定哪些异常不会回滚, 默认没有指定,如果指定,应该在rollbackFor的范围内!
//        4、指定事务隔离级别 isolation属性
        studentDao.updateNameById("test", 1);
    }
}
